home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / p063b9s.zip / UNIT / SHARE.PAS < prev    next >
Pascal/Delphi Source File  |  1996-06-18  |  3KB  |  107 lines

  1. UNIT Share;
  2. {╔══════════════════════════════════════════════════════════════════════════╗}
  3. {║ Lowlevel routines to use SHARE.EXE            Last changed: 20.04.96  SA ║}
  4. {║                                                                          ║}
  5. {║                         (C) Copyright 1989-96 by                         ║}
  6. {║       Dan Wulff, Jens Sandalgaard, Steen Christensen & S¢ren Ager        ║}
  7. {║                                                                          ║}
  8. {║ This source may not be given to anybody, without the written permission  ║}
  9. {║ from The Portal Team.                                                    ║}
  10. {╚══════════════════════════════════════════════════════════════════════════╝}
  11. {$I POPDEFS.INC}
  12.  
  13. INTERFACE
  14.  
  15. USES Use32;
  16.  
  17. FUNCTION ShareInstalled: Boolean;
  18. FUNCTION Lock(VAR f: file; Start,Size: LongInt; VAR ErrCode: Word): Boolean;
  19. FUNCTION UnLock(VAR f: file; Start,Size: LongInt): Boolean;
  20.  
  21. IMPLEMENTATION
  22.  
  23. USES Dos
  24. {$IFDEF OS2}
  25.      , Os2Base
  26. {$ENDIF}
  27.      ;
  28.  
  29. {$IFDEF OS2}
  30.   FUNCTION ShareInstalled: Boolean;
  31.   BEGIN
  32.     ShareInstalled:=True;
  33.   END;
  34.  
  35. {$ELSE}
  36.   FUNCTION ShareInstalled: Boolean; Assembler;
  37.   ASM
  38.     mov   ax,$1000
  39.     int   $2f
  40.     cmp   al,$ff
  41.     mov   al,1             { assume ok }
  42.     je    @1
  43.     dec   al
  44. @1:
  45.   END;
  46. {$ENDIF}
  47.  
  48. {$IFDEF OS2}
  49.   FUNCTION Lock(VAR f: file; Start,Size: LongInt; VAR ErrCode: Word): Boolean;
  50.   VAR
  51.     UnLockRange, LockRange : FileLock;
  52.   BEGIN
  53.     FillChar(UnlockRange, SizeOf(UnLockRange), 0);
  54.     LockRange.lOffset:=Start;
  55.     LockRange.lRange:=Size;
  56.     ErrCode:=DosSetFileLocks(FileRec(f).Handle, UnLockRange, LockRange,0,0);
  57. {writeln(ErrCode,' ',Start,' ',Size);}
  58.     Lock:=(ErrCode<>33);
  59.     Lock:=True;
  60.   END;
  61.  
  62. {$ELSE}
  63.   FUNCTION Lock(VAR f: file; Start,Size: LongInt; VAR ErrCode: Word): Boolean;
  64.   VAR
  65.     Regs: Registers;
  66.   BEGIN
  67.     Regs.ax:=$5c00;
  68.     Regs.bx:=FileRec(f).Handle;
  69.     regs.di:=Word(Size);
  70.     Regs.si:=Word(Size shr 16);
  71.     Regs.dx:=Word(Start);
  72.     Regs.cx:=Word(Start shr 16);
  73.     Intr($21,regs);
  74.     ErrCode:=Regs.ax;
  75.     Lock:=NOT (Odd(Regs.Flags) AND (Regs.ax=$21));
  76.   END;
  77. {$ENDIF}
  78.  
  79. {$IFDEF OS2}
  80.   FUNCTION UnLock(VAR f: file; Start,Size: LongInt): Boolean;
  81.   VAR
  82.     UnLockRange, LockRange : FileLock;
  83.   BEGIN
  84.     FillChar(LockRange, SizeOf(LockRange), 0);
  85.     UnLockRange.lOffset:=Start;
  86.     UnLockRange.lRange:=Size;
  87.     UnLock:=(DosSetFileLocks(FileRec(f).Handle, UnLockRange, LockRange,0,0)<>33);
  88.   END;
  89.  
  90. {$ELSE}
  91.   FUNCTION UnLock(VAR f: file; Start,Size: LongInt): Boolean;
  92.   VAR
  93.     Regs: Registers;
  94.   BEGIN
  95.     Regs.ax:=$5c01;
  96.     Regs.bx:=FileRec(f).Handle;
  97.     regs.di:=Word(Size);
  98.     Regs.si:=Word(Size shr 16);
  99.     Regs.dx:=Word(Start);
  100.     Regs.cx:=Word(Start shr 16);
  101.     intr($21,regs);
  102.     UnLock:=Not (Odd(Regs.Flags) And (Regs.ax=$21));
  103.   END;
  104. {$ENDIF}
  105.  
  106. END.
  107.